﻿Public Class KullaniciListesi
	Inherits Process

	Public Overrides Sub GenericEvent(ByVal e As ProcessEventArgs)
		Select Case e.EventType
			Case EventType.Initialize
				InitialHelp = "Değiştirmek istediğiniz kullanıcıyı seçerek Enter tuşuna basın."
				Text = "Kullanıcı Listesi"
				AddList()
				List.AddColumns("[pk]kaykul(Kod;c;60),username(Kullanıcı Adı;l;120),adi(Adı Soyadı;l;100%),status(A/P;c;40);")
				List.AddButtons("Add.Edit.-")
				List.AddButton("Transfer", "Yetki aktarımı")
				List.SetSQL(Remote, "select * from users order by kaykul")
			Case EventType.Shown
				List.Populate()
				Buttons.Show("Save")
			Case EventType.Other
				Select Case e.Name
					Case "List.Transfer" : ShowDialog("transfer")
				End Select
			Case EventType.Add
				ShowDialog("new")
			Case EventType.Edit, EventType.Activate
				ShowDialog("edit")
			Case EventType.Delete
				If Not Confirm("Bu kullanıcıyı silmek istediğinizden emin misiniz?") Then Exit Sub
				Sistem.Kullanici.Sil(Remote, List.SelectedRow("kaykul"))
			Case EventType.Save
				If Not Confirm("Kullanıcı tanımlarını şubelere göndermek istediğinizden emin misiniz?") Then Exit Sub
				For i As Integer = 3 To 3
					Help = "*" & i & " numaralı şubeye gönderiliyor..."
					Do
						Try
							Sistem.Kullanici.SubeyeGonder(Remote, i)
							Exit Do
						Catch ex As Exception
							Window.Connect()
							If Not Confirm(i & " numaralı şubeye kaydedilirken bir hata oluştu. Tekrar denemek ister misiniz?", ex.Message) Then
								If Not Confirm("Bu şubeyi atlayarak devam etmek ister misiniz?") Then Exit Sub
								Exit Do
							End If
						End Try
					Loop
				Next
				Help = "İşlem tamam."
				Info("Kullanıcı tanımları şubelere gönderildi.")
		End Select
	End Sub

	Public Overrides Sub DialogEvent(e As ProcessEventArgs)
		Select Case Modal.Name
			Case "transfer" : Transfer(e)
			Case "new" : NewUser(e)
			Case "edit" : EditUser(e)
		End Select
	End Sub

	Private Sub Transfer(e As ProcessEventArgs)
		Select Case e.EventType
			Case EventType.Initialize
				Modal.Start("Kullanıcı Yetki Aktarımı", "Yetkilerin kimden kime aktarılacağını seçin.")
				Modal.AddCombo("user1", "Yetki sahibi", Sistem.Kullanici.Source, "nl;width=25", "", "Kullanıcı seçimi yapmalısınız.")
				Modal.AddCombo("user2", "Aktarılacak", Sistem.Kullanici.Source, "nl;width=25", "", "Kullanıcı seçimi yapmalısınız.")
			Case EventType.Shown
				Modal.Buttons.Show("Save")
			Case EventType.Save
				If Not Confirm("Yetki aktarımını yapmak istediğinizden emin misiniz?") Then Return
				Sistem.Kullanici.YetkiAktar(Remote, Modal.Input("user1"), Modal.Input("user2"))
				Modal.Close()
		End Select
	End Sub

	Dim username, adi, sube As Input
	Private Sub NewUser(e As ProcessEventArgs)
		Select Case e.EventType
			Case EventType.Initialize
				Modal.Start("Yeni kullanıcı", "Kullanıcı bilgilerini girin.")
				username = Modal.AddText("username", "Kullanıcı adı", "nl;width=20")
				adi = Modal.AddText("adi", "Adı soyadı", "nl;width=20")
				sube = Modal.AddCombo("sube", "Şube", "0:Merkez,1:Lefkoşa,2:Girne,3:Mağusa,4:İskele,5:Güzelyurt,6:Lefke", "nl;width=10", "")
			Case EventType.Shown
				Modal.Buttons.Show("Save")
			Case EventType.Save
				Dim Result = Sistem.Kullanici.Yeni(Remote, username.Get, adi.Get, sube.Get)
				If Result.ErrorOccured Then
					Warning(Result.ErrorMessage)
					Return
				End If
				Info("Yeni kullanıcı oluşturulmuştur.")
				Modal.Close()
				List.Populate()
				List.Select(Result.Kod)
				Buttons.PerformClick("Edit")
		End Select
	End Sub

	Dim Menus As String = "ABCDEFGHIJKLMNOPRSTVY"
	Private Sub EditUser(e As ProcessEventArgs)
		Select Case e.EventType
			Case EventType.Initialize
				Modal.Start("Kullanıcı bilgileri", "Kullanıcı bilgilerini ve yetkilerini girin.")
				Modal.AddText("adi", "Adı soyadı", "nl;width=20")
				Modal.AddText("ssd2", "SSD ² yetkileri", "nl;width=20")
				Modal.AddTree("Tree", 400, 250)
			Case EventType.Shown
				PopulateTree()
				Rs = Sistem.Kullanici.Oku(Remote, List.SelectedRow("kaykul"))
				Modal.SetValues("adi,ssd2", Rs("adi"), Rs("ssd2"))
				If Not IsDBNull(Rs("hak")) Then
					For Each Item As String In Split(Rs("hak"), ";")
						Dim App As String = Mid(Item, 2, 1)
						Dim Length As Integer = If(App = "S" Or App = "Q", 2, 4)
						Item = Mid(Item, 4)
						For i As Integer = 1 To Len(Item) Step Length
							Dim Prg As String = Mid(Item, i, Length)
							If App = "Q" Then Prg = "S" & Mid(Prg, 1, 1) & "Q" & Mid(Prg, 2) Else Prg = App & Prg
							Modal.Tree.ItemChecked(Prg) = True
						Next
					Next
				End If
				Modal.Buttons.Show("Save")
			Case EventType.Save
				Dim Apps As String = "SQMYEPKD"
				Dim Items(8) As String
				For Each Item As String In Modal.Tree.CheckedNodes
					If Mid(Item, 3, 1) = "Q" Then Item = "Q" & Mid(Item, 2, 1) & Mid(Item, 4)
					Items(InStr(Apps, Mid(Item, 1, 1))) &= Mid(Item, 2)
				Next
				Dim Total As String = ""
				For i As Integer = 1 To Len(Apps)
					Total &= "[" & Mid(Apps, i, 1) & "]" & Items(i) & ";"
				Next
				Sistem.Kullanici.Kaydet(Remote, List.SelectedRow("kaykul"), Modal.Input("adi"), Modal.Input("ssd2"), Total)
				Info("Kayıt değişiklikleri gerçekleştirilmiştir.")
				List.Populate()
				Modal.Close()
		End Select
	End Sub

	Sub PopulateTree()
		Dim Text As String = My.Resources.Birnet
		Dim PrevKey As String = ""
		Dim PrevDepth As Integer = -1
		For Each Item As String In Split(Text, vbCrLf)
			If Item <> "" Then
				Dim Depth As Integer = 0
				Do Until Mid(Item, Depth + 1, 1) <> vbTab
					Depth += 1
				Loop
				Item = Mid(Item, Depth + 1)
				If InStr(Item, " ") = 0 Then Item &= " (Bilinmeyen öğe)"
				For i As Integer = Depth To PrevDepth
					PrevKey = Modal.Tree.GetParentKey(PrevKey)
				Next
				Dim Pos As Integer = InStr(Item, " ")
				Dim Key As String = PrevKey & Mid(Item, 1, Pos - 1)
				Item = Mid(Item, Pos + 1)
				Modal.Tree.AddNode(PrevKey, Key, Item & If(Depth < 2, "", " [" & Mid(Key, 2) & "]"))
				PrevDepth = Depth
				PrevKey = Key
			End If
		Next
	End Sub

End Class

Public Class KullaniciOzetListesi
	Inherits Process

	Public Overrides Sub GenericEvent(ByVal e As ProcessEventArgs)
		Select Case e.EventType
			Case EventType.Initialize
				InitialHelp = User.Department.Name & " şubesi kullanıcı listesi."
				Text = "Kullanıcı Listesi"
				AddList()
				List.AddColumns("kaykul(Kod;c;60),username(Kullanıcı Adı;l;120),adi(Adı Soyadı;l;100%),status(A/P;c;40);")
			Case EventType.Shown
				List.SetSQL(Remote, "select * from users where substring(kaykul,1,1)=" & User.Department.ID & " order by adi")
				List.Populate()
		End Select
	End Sub

End Class

